package elementosJuego;

import java.lang.reflect.InvocationTargetException;
import java.util.logging.Level;
import java.util.logging.Logger;
import servidor.GestorJuego;

public class Bala extends Figura{

    public Bala(Integer x0,Integer y0, GestorJuego gestorJuego, char apunta){
        super(x0, y0, 5, 5, gestorJuego);
        this.apunta = apunta;
        System.out.println("Nueva bala..");
    }

    @Override
    public void colisionoCon(Jugador c) {
        System.out.println("Bala: Choque con un jugador.");
        c.colisionoCon(this);
        gestorJuego.getBalas().remove(this);
        gestorJuego.getEstadoJuego().Actualizar();
    }

    @Override
    public void colisionoCon(Bala c) {
        System.out.println("Bala: Choque con una bala.");
        gestorJuego.getBalas().remove(this);
        gestorJuego.getBalas().remove(c);
        gestorJuego.getEstadoJuego().Actualizar();
    }

    @Override
    public void colisionoCon(Pared c) {
        System.out.println("Bala: Choque con una pared.");
        gestorJuego.getBalas().remove(this);
        gestorJuego.getEstadoJuego().Actualizar();
    }

    public void movete() {
        try {
            getClass().getMethod("mover" + apunta, (Class[]) null).invoke(this, (Object[]) null);
        } catch (IllegalAccessException ex) {
        Logger.getLogger(Bala.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalArgumentException ex) {
        Logger.getLogger(Bala.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InvocationTargetException ex) {
        Logger.getLogger(Bala.class.getName()).log(Level.SEVERE, null, ex);
        } catch (NoSuchMethodException ex) {
        Logger.getLogger(Bala.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SecurityException ex) {
        Logger.getLogger(Bala.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}